
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
 */
package itm.dao.administracion;

//~--- non-JDK imports --------------------------------------------------------

import itm.exception.ControlException;

import itm.vo.administracion.CasoUsoVO;
import itm.vo.administracion.RolVo;

//~--- JDK imports ------------------------------------------------------------

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Administrador
 */
public class RolDAO {
    private CallableStatement callStmt = null;
    private ResultSet         res      = null;
    private String            sql      = "";
    Connection                dbConexion;

    public RolDAO(Connection dbConexion) {
        this.dbConexion = dbConexion;
    }

    public int cant_Personas_Rol(String idRol) throws Exception, SQLException {
        int resultado = 0;

        try {
            sql      = "{call ITM_CANT_PERS_ROL(?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setInt(1, Integer.parseInt(idRol));
            callStmt.execute();
            res = callStmt.executeQuery();

            while (res.next()) {
                resultado = res.getInt(1);
            }
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return resultado;
    }

    public String crearRol(RolVo rolVO) throws ControlException, SQLException {
        String resultado = "";

        try {
            sql      = "{call ITM_CREAR_ROL(?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, rolVO.getNombreRol());
            callStmt.execute();
            resultado = callStmt.getString(1);
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return resultado;
    }

    public String eliminarPrivilegiosRol(CasoUsoVO casoUsoVO) throws ControlException, SQLException {
        String resultado = "";

        try {
            sql      = "{call ITM_ELIMINAR_PRIVILEGIOS_ROL(?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, casoUsoVO.getIdRol());
            callStmt.execute();
            resultado = callStmt.getString(1);
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return resultado;
    }

    public String insertarPrivilegios(CasoUsoVO casoUsoVO) {
        String resultado = "";

        try {
            sql      = "{call ITM_CREAR_ROL_CASO_USO(?,?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, casoUsoVO.getIdRol());
            callStmt.setString(3, casoUsoVO.getIdCasoUso());
            callStmt.execute();
            resultado = callStmt.getString(1);
        } catch (Exception ce) {
            ce.printStackTrace();
        }

        return resultado;
    }

    public List<CasoUsoVO> listarCasoUso(CasoUsoVO casoUsoVO) throws ControlException, SQLException {
        List<CasoUsoVO> listaCasoUso = new ArrayList<CasoUsoVO>();

        try {
            sql      = "{call ITM_LISTA_CASOS_USO ()}";
            callStmt = dbConexion.prepareCall(sql);
            res      = callStmt.executeQuery();

            while (res.next()) {
                casoUsoVO = new CasoUsoVO();
                casoUsoVO.setIdCasoUso(res.getString(1));
                casoUsoVO.setNombreCasoUso(res.getString(2));
                listaCasoUso.add(casoUsoVO);
            }
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return listaCasoUso;
    }

    public List<CasoUsoVO> listarRoles(CasoUsoVO casoUsoVO) throws ControlException, SQLException {
        List<CasoUsoVO> listaRol = new ArrayList<CasoUsoVO>();

        try {
            sql      = "{call ITM_LISTAR_ROLES ()}";
            callStmt = dbConexion.prepareCall(sql);
            res      = callStmt.executeQuery();

            while (res.next()) {
                casoUsoVO = new CasoUsoVO();
                casoUsoVO.setIdRol(res.getString(1));
                casoUsoVO.setNombreRol(res.getString(2));
                casoUsoVO.setRolSistema(res.getString(3));
                casoUsoVO.setCantUsuarioRol(res.getString(4));
                listaRol.add(casoUsoVO);
            }
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return listaRol;
    }

    public List<CasoUsoVO> listarPrivilegios(CasoUsoVO casoUsoVO) throws ControlException, SQLException {
        List<CasoUsoVO> listaPrivilegio = new ArrayList<CasoUsoVO>();

        try {
            sql      = "{call ITM_CONSULTAR_PRIVILEGIOS (?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, casoUsoVO.getIdRol());
            res = callStmt.executeQuery();

            while (res.next()) {
                casoUsoVO = new CasoUsoVO();
                casoUsoVO.setIdCasoUso(res.getString(1));
                casoUsoVO.setNombreCasoUso(res.getString(2));
                listaPrivilegio.add(casoUsoVO);
            }
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return listaPrivilegio;
    }

    public String eliminarRol(CasoUsoVO casoUsoVO) throws ControlException, SQLException {
        String resultado = "";

        try {
            sql      = "{call ITM_ELIMINAR_ROL(?,?)}";
            callStmt = dbConexion.prepareCall(sql);
            callStmt.registerOutParameter(1, java.sql.Types.VARCHAR);
            callStmt.setString(2, casoUsoVO.getIdRol());
            callStmt.execute();
            resultado = callStmt.getString(1);
        } catch (SQLException ce) {
            ce.getStackTrace();
        }

        return resultado;
    }
}
